package org.lemon.cla.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.lemon.cla.pojo.ClubApplication;
import org.lemon.cla.vo.ClubApplicationVo; // 导入 ClubApplicationVo
import org.lemon.cla.dto.request.ClubApplicationSearchRequest;
import org.lemon.cla.enums.ClubApplicationStatusEnum;

public interface IClubApplicationService extends IService<ClubApplication> {
    // ... 其他 Service 方法 ...

    boolean hasPendingApplication(Long userId, Long clubId);

    boolean reviewClubApplication(Long applicationId, ClubApplicationStatusEnum newStatus, Long reviewerId);

    /**
     * 根据申请ID获取社团申请详情，包含申请人和审核人信息。
     * @param applicationId 申请ID
     * @return 社团申请视图对象 (如果用户被逻辑删除则信息会特殊处理)
     */
    ClubApplicationVo getClubApplicationVoById(Long applicationId);

    /**
     * 分页获取所有社团申请，包含申请人和审核人信息。
     * @param page 分页对象 (ClubApplicationVo 泛型)
     * @return 分页社团申请视图对象列表
     */
    IPage<ClubApplicationVo> getAllClubApplicationsVo(Page<ClubApplicationVo> page);

    /**
     * 根据多个条件模糊查询社团申请，包含申请人和审核人信息。
     * @param page 分页对象 (ClubApplicationVo 泛型)
     * @param request 查询请求DTO
     * @return 分页社团申请视图对象列表
     */
    IPage<ClubApplicationVo> searchClubApplicationsByConditions(Page<ClubApplicationVo> page, ClubApplicationSearchRequest request);
}